home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / reader_requests / scilab / tests / auto.dia.ref < prev    next >
Text File  |  1999-09-16  |  6KB  |  407 lines

  1.  
  2. // test conversion transfer <---> state-space
  3.  
  4. // 1- coff inversion
  5.  
  6.  s=poly(0,'s'); a=[1 2 3;4 5 6;7 8 9];
  7.  
  8.  [num,den]=coff(a,'s');h1=num/den;h2=(s*eye-a)**(-1);
  9.  
  10.  e=h1-h2;if norm(coeff(e(2)))>5000*%eps then bugmes();quit;end
  11.  
  12. // 2-test de tf2ss et ss2tf
  13.  
  14.  n=[1+s   2+3*s+4*s**2        5; 0        1-s             s];
  15.  
  16.  d=[1+3*s   5-s**3           s+1;1+s     1+s+s**2      3*s-1];
  17.  
  18.  
  19.  h=syslin('c',n./d);
  20.  
  21.  [n,d]=simp(n,d);if h<>tlist('r',n,d,'c') then bugmes();quit;end
  22.  
  23.  sl=tf2ss(h); e=h-ss2tf(sl);
  24.  
  25.  if norm(coeff(e(2)))>100000*%eps then bugmes();quit;end
  26.  
  27.  
  28.  
  29. //
  30.  
  31.   a = [0.8604043 , 0.0070020 , 0.6223373 , -1.356213 , -4.2301775
  32.        0.159714 ,  0.0857791 , -0.2367751 , 0.4958580 , 0.6398817
  33.       -4.3054931 , -0.0365878 , 2.1784911 , 0.0314793 , 2.3728994
  34.       -3.7115779 , -0.5370809 , 2.4291716 , -0.6352663 , 2.6972781
  35.        6.3580966 , 0.1377712 , -4.0461243 , -0.5192899 , -4.0394083];
  36.  
  37.   b = [-0.0532544 , -0.1494083 , -0.0098619
  38.        -0.0355030 , -0.0162722 , 0.1045365
  39.        -0.1301775 , 0.1736686 , -0.0611440
  40.         0.1834320 , 0.1757396 , -0.5956607
  41.         0.1775148 , -0.1186391 , 0.1439842];
  42.  
  43.   c = [2 , 7 , -2 , 5 , 1
  44.        0 , -1 , 3 , 0 , 2];
  45.  
  46.   d = [1 , 0 , 0
  47.        0 , 0 , 0];
  48.  
  49.  
  50. sl=syslin('c',a,b,c);
  51.  
  52. if sl<>tlist('lss',a,b,c,0*ones(2,3),0*ones(5,1),'c') then bugmes();quit;end
  53.  
  54. //
  55.  
  56. eps=sqrt(%eps);
  57.  
  58. if contr(a,b,eps)<>4 then bugmes();quit;end
  59.  
  60. if contr(a',c',eps)<>3 then bugmes();quit;end
  61.  
  62. spec(a);
  63.  
  64. xbasc();xselect();
  65.  
  66. plzr(sl)
  67.  
  68. //
  69.  
  70. slc=contrss(sl,eps);ssprint(slc)
  71.  
  72.     |-1.0289055 -1.91259    6.6863837 -2.3911949 | 
  73. .   |-0.0955268 -1.5790365  7.5050866 -1.8143246 | 
  74. x = | 0.0758051 -4.2025605  2.3519864 -1.6769419 |x
  75.     | 0.3692750 -2.0727197  1.1533554 -1.2940444 | 
  76.  
  77.       |-0.1263403 -0.212262   0.6247454 |
  78.       | 0.2650276 -0.1121187  0         |
  79.     + | 0         -0.2002056  0         |u
  80.       | 0          0          0         |
  81.  
  82.     |-3.2013033  2.2471114  2.1356648 -2.2749904 |    
  83. y = |-1.602D-07  3.012D-07 -1.4984584  3.4285015 |x   
  84.  
  85. slo=obsvss(sl,eps);ssprint(slo)
  86.  
  87. .   |-0.4272289 -0.2662516  0.2081474 | 
  88. x = | 0.3415366 -0.5532610 -0.3279827 |x
  89.     | 0.9676787  0.1381688 -0.5695102 | 
  90.  
  91.       |-0.1097643  3.290D-08  0.2195285 |
  92.     + | 0.0374221  0.0847100 -0.0748442 |u
  93.       | 0.2180784  0.0514041 -0.4361566 |
  94.  
  95.     |-9.1104336  0          0 |    
  96. y = | 1.2074069  3.5414924  0 |x   
  97.  
  98. slm=minss(sl,eps);ssprint(slm)
  99.  
  100. .   |-1.0328573 -0.5017879 |    | 0.2469955  0.0582203 -0.4939909 |    
  101. x = | 0.3895376 -0.5171428 |x + |-1.340D-08 -0.0801783  0         |u   
  102.  
  103.     | 4.0486569  2.9398764 |    
  104. y = | 2.025D-07 -3.7416574 |x   
  105.  
  106. //
  107.  
  108. hm=ss2tf(slm);
  109.  
  110. h=ss2tf(sl);
  111.  
  112. hh=c*(s*eye-a)**(-1)*b + 0*ones(2,3);
  113.  
  114. hh=hh-h;
  115.  
  116. if norm(coeff(hh(2))) > 1.e-5 then bugmes();quit;end
  117.  
  118. [num,den]=coff(a,'s');
  119.  
  120. hh=c*real(num)*b/real(den) + 0*ones(2,3);
  121.  
  122. hh=hh-h;
  123.  
  124. if norm(coeff(hh(2))) > 1.e-5 then bugmes();quit;end
  125.  
  126. slh=tf2ss(hm)       //was tf2ss(h)
  127.  slh  =
  128.  
  129.  
  130.        slh(1)   (state-space system:)
  131.  
  132.  lss   
  133.  
  134.        slh(2) = A matrix = 
  135.  
  136. ! - 0.8120643    0.3708242 !
  137. ! - 0.3515107  - 0.7379359 !
  138.  
  139.        slh(3) = B matrix = 
  140.  
  141. ! - 1.3958683    4.188D-07    2.7917359 !
  142. ! - 0.2336248  - 0.4065365    0.4672493 !
  143.  
  144.        slh(4) = C matrix = 
  145.  
  146. ! - 0.7164       0.        !
  147. !   0.1235081  - 0.7379406 !
  148.  
  149.        slh(5) = D matrix = 
  150.  
  151. !   0.    0.    0. !
  152. !   0.    0.    0. !
  153.  
  154.        slh(6) = X0 (initial state) = 
  155.  
  156. !   0. !
  157. !   0. !
  158.  
  159.        slh(7) = Time domain = 
  160.  
  161.  c   
  162.  
  163. //
  164.  
  165. u=eye(3,60);
  166.  
  167. xbasc();
  168.  
  169. ;
  170.  
  171. plot2d1("enn",1,flts(u,dscr(slh,0.3))');
  172.  
  173. plot2d1("enn",1,flts(u,dscr(sl,0.3))',[-3,-4],"101")
  174.  
  175.  
  176. //csim  flts
  177.  
  178. //definition
  179.  
  180. ti=2.7;k=0.87;td=0.69;n=200;
  181.  
  182.  
  183. a=[0 0 0 0 0 -1/ti
  184.    0 -n/td 0 0 0 n/td
  185.    k n -1 0 0 -k-n
  186.    0 0 1 -1 0 0
  187.    0 0 0 1 -1 0
  188.    0 0 0 0 1 -1];
  189.  
  190.  
  191. b=[1/ti;0;k;0;0;0];
  192.  
  193.  
  194. c=[0 0 0 0 0 1];
  195.  
  196. tech=0.2;t=0:tech:15; //
  197.  
  198. deff('[y]=u(t)','if t=0 then y=0;else y=1,end') //step
  199.  
  200.  
  201. // avec csim
  202.  
  203. if type(csim)<>13 then comp(csim);end
  204.  
  205. sl=syslin('c',a,b,c);
  206.  
  207. //comparison
  208.  
  209. // csim
  210.  
  211. xbasc(xget("window"));
  212.  
  213. plot2d(t',csim(u,t,sl)')
  214.  
  215. plot2d(t',csim('ech',t,sl)',-2,"001")
  216.  
  217. //exact discretization
  218.  
  219. sld=dscr(sl,tech);
  220.  
  221. plot2d(t',flts(ones(t),sld)',-3,"001")
  222.  
  223. //
  224.  
  225. //impulse responses
  226.  
  227. //
  228.  
  229. ;xbasc();
  230.  
  231. plot2d(t',csim('imp',t,sl)')
  232.  
  233. //discretization
  234.  
  235. plot2d(t',flts(eye(t)/tech,sld)',-2,"001");
  236.  
  237. //fin
  238.  
  239. ;xbasc();
  240.  
  241. //test bode - black et nyquist
  242.  
  243.  s=poly(0,'s')
  244.  s  =
  245.  
  246.     s   
  247.  
  248. // n=poly(1,'s','c'); d=real(poly([5+15*%i,5-15*%i],'s'))
  249.  
  250.  n=1+s;d=1+2*s;
  251.  
  252.  h=syslin('c',n,d)
  253.  h  =
  254.  
  255.     1 + s    
  256.     -----    
  257.     1 + 2s   
  258.  
  259.  sl=tf2ss(h);
  260.  
  261.  sld=dscr(sl,0.01);
  262.  
  263.  hd=ss2tf(sld);
  264.  
  265. [w,rf]=repfreq(h,0.01,100);
  266.  
  267. //
  268.  
  269. //transfer
  270.  
  271.  bode(h,0.01,100);
  272.  
  273. ;xbasc();
  274.  
  275.  bode(h,0.01,100,0.01)
  276.  
  277. ;xbasc();
  278.  
  279.  bode(sl,0.01,100);
  280.  
  281. ;xbasc();
  282.  
  283.  bode(sl,0.01,100,0.01)
  284.  
  285. ;xbasc();
  286.  
  287. //
  288.  
  289.  bode(w,rf)
  290.  
  291. ;xbasc();
  292.  
  293.  bode(w,20*log(abs(rf))/log(10),(180/%pi)*atan(imag(rf),real(rf)))
  294.  
  295. ;xbasc();
  296.  
  297. //
  298.  
  299. //transfer
  300.  
  301.  bode(sld,0.001,1)
  302.  
  303. // bode(sld,0.001,1,0.01)
  304.  
  305. //
  306.  
  307. ;xbasc();
  308.  
  309. // bode(hd,0.001,1)
  310.  
  311.  bode(hd,0.001,1,0.01)
  312.  
  313. //
  314.  
  315. //
  316.  
  317. //nyquist
  318.  
  319. //
  320.  
  321. ;xbasc();
  322.  
  323. nyquist(h,0.01,100); nyquist(h,0.01,100,0.01);
  324.  
  325. ;xbasc();
  326.  
  327. nyquist(sl,0.01,100); nyquist(sl,0.01,100,0.01);
  328.  
  329. ;xbasc();
  330.  
  331. nyquist(w,rf);
  332.  
  333. nyquist(w,20*log(abs(rf))/log(10),(180/%pi)*atan(imag(rf),real(rf)));
  334.  
  335. //
  336.  
  337. //nyquist(sld,0.001,1);nyquist(sld,0.001,1,0.01);
  338.  
  339. ;xbasc();
  340.  
  341. //nyquist(hd,0.001,1);nyquist(hd,0.001,1,0.01);
  342.  
  343. ;xbasc();
  344.  
  345. //
  346.  
  347. //black
  348.  
  349. //
  350.  
  351.  
  352. black(h,0.01,100); black(h,0.01,100,0.01);
  353.  
  354. ;xbasc();
  355.  
  356. black(sl,0.01,100); black(sl,0.01,100,0.01);
  357.  
  358. ;xbasc();
  359.  
  360. black(w,rf);
  361.  
  362. ;xbasc();
  363.  
  364. black(w,20*log(abs(rf))/log(10),(180/%pi)*atan(imag(rf),real(rf)));
  365.  
  366. //
  367.  
  368. ;xbasc();
  369.  
  370. black(sld,0.001,1);black(sld,0.001,1,0.01);
  371.  
  372. ;xbasc();
  373.  
  374. black(hd,0.001,1);black(hd,0.001,1,0.01);
  375.  
  376. ;xbasc();
  377.  
  378. //
  379.  
  380. //test  dscr
  381.  
  382. slc=syslin('c',[0 1;0 0],[0;0],[1,0]);qc=[0 0;0 0.1]
  383.  qc  =
  384.  
  385. !   0.    0.  !
  386. !   0.    0.1 !
  387.  
  388. qd=ones(2,2)./[30000 2000;2000 100];
  389.  
  390. sld=syslin(0.1,[1 0.1;0 1],[0;0],[1 0]);
  391.  
  392. [s1]=dscr(slc,0.1);
  393.  
  394. if norm(s1(2)-sld(2))>10*%eps then bugmes();quit;end
  395.  
  396. if norm(s1(3)-sld(3))>10*%eps then bugmes();quit;end
  397.  
  398. [s1,r]=dscr(slc,0.1,qc);
  399.  
  400. if norm(s1(2)-sld(2))>10*%eps then bugmes();quit;end
  401.  
  402. if norm(s1(3)-sld(3))>10*%eps then bugmes();quit;end
  403.  
  404. if norm(r-qd)>10*%eps then bugmes();quit;end
  405.  
  406.  
  407.